Golang实现RBAC

Role-Based Access Control(下简称rbac) 以角色为基础的访问控制模型,通过角色连接用户和权限,达到两者解耦的目的

rbac中有三种类型:用户、角色、权限,分别解释一下各自的作用

  • 用户:使用系统的个体,一般是自然人,通过操作系统达到一定目的
  • 权限:系统中每一个模块的操作,curd,的使用许可证明
  • 角色:用户和权限之间的桥梁,是一个抽象的概念,与用户或权限可以是一对多,一对一,多对一,多对多的关系,当用户操作某一个模块时,会先将用户名下的角色取出来和模块权限进行对比,如果满足条件即可操作,反之则不行

使用介绍

  • 安装
go get github.com/ne7ermore/gRBAC
  • 数据库配置 本项目使用的mongodb,如果没有安装mongo请先安装
go get gopkg.in/mgo.v2

数据库信息配置在 github.com/ne7ermore/gRBAC/common/const.go 中,可以根据自己实际情况修改,默认为:

var (
    Addrs     string = "127.0.0.1:27017"
    Timeout   int64  = 5
    PoolLimit int    = 1000
)
  • 引入auth模块
import "github.com/ne7ermore/gRBAC/auth"
  • 使用
func createPerm() {
    p, err := auth.CreatePermisson("p1", "form1:abc:view")
    if err != nil {
        panic(err)
    }
    // handle p
}

func createRole() {
    r, err := auth.CreateRole("role1")
    if err != nil {
        panic(err)
    }

    // add permission
    if _, err := auth.Assign(r.Id.Hex(), p.Id.Hex()); err != nil {
        panic(err)
    }
}

func createUser() {
    u, err := auth.CreateUser("use1")
    if err != nil {
        panic(err)
    }

    // add role
    if _, err := auth.AddRole(u.Id.Hex(), r.Id.Hex()); err != nil {
        panic(err)
    }
}

所有API

Function Description
CreatePermisson Create a new permisson
GetPerm get permission by id
UpdatePerm update permission by id
CreateRole Create a new role
GetRole Get role by id
Assign Assign a permission to a role
Revoke Revoke a permission from the role
CreateUser Create a new user
GetUser Get one user by mongid
GetUserByUid Get one user by Uid
AddRole Add one role to a user
DelRole Delete one role from the user
IsPrmitted A user has a permission or not
GetAllPerms Get all permissions
GetAllRoles Get all roles
GetAllUsers Get all users

作者

Nevermore Written by:

步步生姿,空锁满庭花雨。胜将娇花比。